home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 41.zip / BS1 part 41 / Lattice C v5.02 d4.adf / examples / debugger / whichis.cpr < prev   
Text File  |  1988-11-07  |  2KB  |  97 lines

  1. /* 
  2. Usage: Whichis [ <command> | 0xnnnnnn | n] 
  3. Version 1.00  02-Nov-88
  4.  
  5. Identifies the CLI process associated with a given command, task number
  6. or task address
  7. */
  8.  
  9. parse arg name '0x' tsk .
  10. NULL = "00000000"x
  11.  
  12. if (name = '?') then
  13.    do
  14.    do i = 2 to 6
  15.       'd "'||strip(sourceline(i),'T',"0a"x) '"'
  16.    end
  17.    exit(0)
  18.    end
  19. else if (name ~= '') then
  20.    do
  21.    if datatype(name, 'W') then
  22.       do
  23.       clinum = name
  24.       name = 'Process' name
  25.       end
  26.    else
  27.       cliname = name
  28.    end
  29. else if (tsk ~= '') then
  30.    do
  31.    name = right(tsk,8,'0')
  32.    taskbase = x2c(name)
  33.    name = '0x'||name
  34.    end
  35. else
  36.    do
  37.    'd "No task given to locate"'
  38.    exit(0)
  39.    end
  40.  
  41.  
  42. /* Show all CLI tasks */
  43. dosbase   = findlib("dos.library")
  44. rootnode  = import(offset(dosbase,34),4)
  45. tasktable = d2c(c2d(import(rootnode,4))*4,4)
  46. taskcount = c2d(import(tasktable,4))
  47. do tasknum = 1 to taskcount
  48.    proc = import(offset(tasktable,tasknum*4),4)
  49.    if (proc ~= NULL) then
  50.       do
  51.       proc = offset(proc,-92)
  52.       cli = d2c(c2d(import(offset(proc,172),4))*4,4)
  53.       command = 'No command loaded'
  54.       args = ''
  55.       module = ''
  56.       if (cli ~= NULL) then
  57.          do
  58.          cmdname = d2c(c2d(import(offset(cli,16),4))*4,4)
  59.          cmdlen = c2d(import(cmdname, 1))
  60.          module = import(offset(cmdname,1), cmdlen)
  61.          if cmdlen ~= 0 then
  62.             do
  63.             command = 'Command:' import(offset(cmdname,1), cmdlen)
  64.             cis = d2c(c2d(import(offset(cli,32),4))*4,4)
  65.             cptr = d2c(c2d(import(offset(cis,12),4))*4,4)
  66.             args = import(cptr,80)
  67.             args = translate(args,"'"||'0a0a'x,'"'||'0d00'x)
  68.             y = pos('0a'x, args)
  69.             if (y ~= 0) then args = left(args,y-1)
  70.             end
  71.          end
  72.       if (proc = taskbase | module = cliname | tasknum = clinum) then
  73.          do
  74.          'd "Process' tasknum||': 0x'||c2x(proc) command args'"'
  75.          exit(0)
  76.          end
  77.       end
  78. end
  79. 'd "Unable to find' name '"'
  80. exit(0)
  81.  
  82. /* Find a given library in the system */
  83. findlib:
  84. parse arg tofind
  85. execbase = import("00000004"x,4)
  86. liboff   = 378
  87. nodebase = import(offset(execbase, liboff), 4)
  88.  
  89. do while(import(nodebase,4) ~= NULL)
  90.    namestr = import(import(offset(nodebase,10),4))
  91.    if namestr = tofind then return nodebase
  92.    nodebase = import(nodebase,4)
  93. end
  94.  
  95. 'd "Could not find' tofind||'"'
  96. exit(0)
  97.